////////////////////////////////////////////////////////////////////////////////////////////////////////
////// created by Jan Łukasz Górski, janlgorski@gmail.com, http://mathmed.blox.pl 100% opensource //////
////////////////////////////////////////////////////////////////////////////////////////////////////////
// version 01.02.2012
/*
// SIMPLEST USE
// my script
// created canvas element we draw on
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
options :
this.horizontalNR = number -> number of horizontal lines ( myp.horizontalNR = number )
this.fSize=10; -> font size
this.textColor = 'rgba(red,green,blue,alpha)';
this.plotColor = 'rgba(red,green,blue,alpha)';
this.gridColor = 'rgba(red,green,blue,alpha)';
this.bgColor = 'rgba(red,green,blue,alpha)';
this.enumerateV = 1; -> vertical axis numeration
this.enumerateH = 1; -> horizontal axis numeration
this.lineWidthP = px -> plot line thickness
this.lineWidthG = px -> grid lines thickness
this.adjustTrimmer = nr -> adjusts auto precision
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////
function MakeDraw() {
///////////////////////// optional
this.prepSurface = function () {
document.write("");
}
/////////////////////////
//////// prepares user interface
this.prepUI = function () {
var canvas=document.getElementById(this.id);
var ctx=canvas.getContext('2d');
ctx.font = (this.fSize+"px sans-serif");
return ctx;
}
//////// determines spacing between horizontal and vertical lines
this.spacing = function (orientation,number) {
var canvas=document.getElementById(this.id);
if (orientation == "horizontal") {
var spac=((canvas.width-this.offsetL-this.offsetR)/number);
} else {
var spac=(canvas.height-(this.fSize*2))/number;
}
return spac;
}
//////// draws grid
this.drawGrid = function() {
var canvas=document.getElementById(this.id);
var hei = canvas.height-this.fSize*2;
var wid = canvas.width-this.offsetR;
var spacH,spacV;
var precalc;
ctx.fillStyle = this.bgColor;
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.lineWidth = this.lineWidthG;
ctx.strokeStyle = this.gridColor;
ctx.beginPath();
spacH = this.spacing("horizontal",this.data.length);
for(var i=0, len = this.data.length; iarr[1]) arr[1]=this.data[i];
}
if (arr[1]-arr[0]<0.1) {
arr[0]=arr[1]-0.1;
arr[1]=arr[1]+0.1;
}
return arr;
}
//////// modifies spacing basing on length of labels ( number )
function determineSpacing(number) {
var spacing=0;
do {
number/=10;
spacing++;
} while (number>1);
return spacing;
}
//////// determines offsets
this.determineOffsets = function() {
var range=this.getDataRange();
if (this.enumerateV) this.offsetL = (determineSpacing(this.dataTrimmer)+2+determineSpacing(Math.max(Math.abs(range[0]),Math.abs(range[1]))))*this.fSize*0.6;
if (this.enumerateP) this.offsetR = (determineSpacing(this.dataTrimmer)+2+determineSpacing(Math.abs(this.data[this.data.length-1])))*this.fSize*0.6;
if (this.enumerateH) this.offsetR = Math.max(this.offsetR,(determineSpacing(this.data.length))*this.fSize*0.6);
}
//////// draws linear graph and enumerates axes/curve
this.drawGraphLinear = function() {
var canvas=document.getElementById(this.id);
var spacHoriz = this.spacing("horizontal",this.data.length);
var spacVertic = this.spacing("vertical",this.horizontalNR);
var hei=canvas.height-2*(spacVertic+this.fSize);
var range=this.getDataRange();
var totalRange=range[1]-range[0];
var verticalCoefficient=hei/totalRange;
var lookupTable = new Array();
for(var i=0, len = this.data.length; ithis.data[i]) {
ctx.fillText(Math.round(this.data[i]*this.dataTrimmer)/this.dataTrimmer,i*spacHoriz+this.offsetL,lookupTable[i]+12);
} else {
ctx.fillText(Math.round(this.data[i]*this.dataTrimmer)/this.dataTrimmer,i*spacHoriz+this.offsetL,lookupTable[i]-7);
}
}
}
if ((this.enumerateH) && (this.seriesIdx == 0)) {
var spaceNeeded = this.data.length*this.fSize*determineSpacing(this.data.length);
if (spaceNeeded < canvas.width) {
for(var i=0, len = this.enumerateHlabels.length; i 0)
ctx.fillStyle = this.plotColor;
if (this.enumerateV) {
for(var i=0; i